import os
import re
from errors import InvalidGitRepositoryError, NoSuchPathError
from git import Git


class Repo(object):
    def __init__(self, path):
        # 获取路径的绝对路径
        epath = os.path.abspath(path)

        # 检查路径下是否存在 .git 目录，表示这是一个正常的 Git 仓库
        if os.path.exists(os.path.join(epath, '.git')):
            self.path = os.path.join(epath, '.git')  # 设置仓库路径为 .git 目录
            self.bare = False  # 非裸仓库
        # 检查路径本身是否以 .git 结尾，表示这是一个裸仓库
        elif os.path.exists(epath) and re.search('\.git$', epath):
            self.path = epath  # 裸仓库路径就是当前路径
            self.bare = True  # 裸仓库标识
        # 路径存在但不是有效的 Git 仓库
        elif os.path.exists(epath):
            raise InvalidGitRepositoryError(epath)  # 抛出无效仓库错误
        # 路径不存在
        else:
            raise NoSuchPathError(epath)  # 抛出路径不存在错误

        # 构建Git对象-> 此时Git对象只有绝对路径
        self.git = Git(self.path)

    @property
    def description(self):
        """
        获取仓库的描述信息

        从 .git/description 文件中读取仓库描述信息，
        这是 Git 仓库的标准文件，通常包含仓库的简短描述。

        Returns:
            str: 仓库描述信息，去除末尾的空白字符

        Raises:
            IOError: 当无法读取 description 文件时可能抛出异常
        """
        try:
            # 打开并读取 description 文件
            f = open(os.path.join(self.path, 'description'))
            result = f.read()
            # 去除末尾的换行符和空格后返回
            return result.rstrip()
        finally:
            # 确保文件被正确关闭
            f.close()
